/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.jm.financeiro.entity;

import br.jm.financeiro.filter.ConfiguraCampoAnnotation;
import java.io.Serializable;
import java.text.Collator;
import java.util.Date;
import java.util.List;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;

/**
 *
 * @author joao
 */
@Entity
@Table(name = "empreendimento_lote", catalog = "salao", schema = "public")
@NamedQueries({
    @NamedQuery(name = "EmpreendimentoLote.findAll", query = "SELECT e FROM EmpreendimentoLote e")})
public class EmpreendimentoLote implements Comparable<EmpreendimentoLote>, Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "empreendimento_lote_id_empreendimento_lote_seq")
    @SequenceGenerator(name = "empreendimento_lote_id_empreendimento_lote_seq", sequenceName = "empreendimento_lote_id_empreendimento_lote_seq", initialValue = 1, allocationSize = 1)
    @Basic(optional = false)
    @NotNull
    @Column(name = "id_empreendimento_lote", nullable = false)
    private Integer idEmpreendimentoLote;
    @Column(name = "dat_update_lote")
    @Temporal(TemporalType.TIMESTAMP)
    private Date datUpdateLote;
    @Column(name = "dat_processo")
    @Temporal(TemporalType.TIMESTAMP)
    private Date datProcesso;
    @Basic(optional = true)
    @NotNull
    @Size(min = 1, max = 20)
    @Column(name = "num_processo", nullable = true, length = 20)
    private String numProcesso;
    @Size(max = 1)
    @Column(length = 1)
    private String status;
    @Size(max = 1)
    @Column(name = "status_anterior", length = 1)
    private String statusAnterior;
    @Size(max = 1)
    @Column(name = "tip_prioridade_lote", length = 1, columnDefinition = "varchar(1) default 'N'")
    private String tipPrioridadeLote;
    @Size(max = 50)
    @Column(name = "dsc_id_lote", length = 50)
    private String dscIdLote;
    @Size(max = 50)
    @Column(name = "dsc_orgao", length = 50)
    private String dscOrgao;
    @Size(max = 10)
    @Column(name = "emp_color", length = 10)
    private String empColor;
    @Size(max = 1)
    @Column(name = "tip_status", length = 1)
    private String tipStatus;
    @Size(max = 1)
    @Column(name = "tip_status_sinal", length = 1)
    private String tipStatusSinal;
    @Size(max = 1)
    @Column(name = "tip_status_anterior", length = 1)
    private String tipStatusAnterior;
    @Size(max = 1)
    @Column(name = "tip_status_sinal_anterior", length = 1)
    private String tipStatusSinalAnterior;
    @Size(max = 100)
    @Column(name = "nom_tecnico", length = 100)
    private String nomTecnico;
    @Size(max = 100)
    @Column(name = "dpt_responsavel", length = 100)
    private String dptResponsavel;
    @Size(max = 100)
    @Column(name = "dsc_diagnostico", length = 100)
    private String dscDiagnostico;
    @ConfiguraCampoAnnotation(tipo = "int", pesquisa = "idEmpreendimento", campo = "id_empreendimento", nomeTabela = "empreendimento_lote", nomeTabelJoin = "empeendimento")
    @JoinColumn(name = "id_empreendimento", referencedColumnName = "id_empreendimento", nullable = false)
    @ManyToOne(optional = false, fetch = FetchType.EAGER)
    private Empreendimento idEmpreendimento;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "idEmpreendimentoLote")
    @LazyCollection(LazyCollectionOption.FALSE)
    @org.hibernate.annotations.Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
    private List<Processo> processoList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "idEmpreendimentoLote")
    @LazyCollection(LazyCollectionOption.FALSE)
    @org.hibernate.annotations.Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
    private List<ProcessoDiagnosticoNivel1> processoDiagnosticoNivel1List;
    @ConfiguraCampoAnnotation(tipo = "String", pesquisa = "idAssunto.dscAssunto", campo = "dsc_assunto", nomeTabela = "empreendimento_lote", nomeTabelJoin = "assunto")
    @JoinColumn(name = "id_assunto", referencedColumnName = "id_assunto", nullable = false)
    @ManyToOne(optional = false, fetch = FetchType.EAGER)
    private Assunto idAssunto;
    @Column(name = "dsc_obs", columnDefinition = "text")
    private String dscObs;
    @Transient
    private String dscStatus;
    @Transient
    private String dscPrioridade;
    @Transient
    private String dscTipoStatus;
    @Transient
    private String dscSinalStatus;

    public EmpreendimentoLote() {
    }

    public EmpreendimentoLote(Integer idEmpreendimentoLote) {
        this.idEmpreendimentoLote = idEmpreendimentoLote;
    }

    public EmpreendimentoLote(Integer idEmpreendimentoLote, String numProcesso) {
        this.idEmpreendimentoLote = idEmpreendimentoLote;
        this.numProcesso = numProcesso;
    }

    public Integer getIdEmpreendimentoLote() {
        return idEmpreendimentoLote;
    }

    public void setIdEmpreendimentoLote(Integer idEmpreendimentoLote) {
        this.idEmpreendimentoLote = idEmpreendimentoLote;
    }

    public String getNumProcesso() {
        return numProcesso;
    }

    public void setNumProcesso(String numProcesso) {
        this.numProcesso = numProcesso;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public String getTipPrioridadeLote() {
        return tipPrioridadeLote;
    }

    public void setTipPrioridadeLote(String tipPrioridadeLote) {
        this.tipPrioridadeLote = tipPrioridadeLote;
    }

    public Empreendimento getIdEmpreendimento() {
        return idEmpreendimento;
    }

    public void setIdEmpreendimento(Empreendimento idEmpreendimento) {
        this.idEmpreendimento = idEmpreendimento;
    }

    public List<Processo> getProcessoList() {
        return processoList;
    }

    public void setProcessoList(List<Processo> processoList) {
        this.processoList = processoList;
    }

    public Date getDatUpdateLote() {
        return datUpdateLote;
    }

    public void setDatUpdateLote(Date datUpdateLote) {
        this.datUpdateLote = datUpdateLote;
    }

    public Date getDatProcesso() {
        return datProcesso;
    }

    public void setDatProcesso(Date datProcesso) {
        this.datProcesso = datProcesso;
    }

    public String getDscStatus() {
        if (this.status == null) {
            this.dscStatus = "Em Andamento";
            this.status = "A";
        } else {
            if (this.status.equals("A")) {
                dscStatus = "Em Andamento";
            } else if (this.status.equals("F")) {
                dscStatus = "Finalizado";
            } else if (this.status.equals("N")) {
                dscStatus = "Não Contratado";
            }
        }
        return dscStatus;
    }

    public void setDscStatus(String dscStatus) {
        this.dscStatus = dscStatus;
    }

    public String getDscTipoStatus() {
        if (this.tipStatus == null) {
            this.dscTipoStatus = "Triunfo";
            this.tipStatus = "T";
        } else {
            if (this.tipStatus.equals("T")) {
                dscTipoStatus = "Triunfo";
            } else if (this.tipStatus.equals("O")) {
                dscTipoStatus = "Terceiro";
            } else if (this.tipStatus.equals("E")) {
                dscTipoStatus = "Terceiro";
            } else if (this.tipStatus.equals("I")) {
                dscTipoStatus = "Triunfo Indeferido";
            } else if (this.tipStatus.equals("D")) {
                dscTipoStatus = "Triunfo Deferido";
            } else if (this.tipStatus.equals("N")) {
                dscTipoStatus = "Não Contratado";
            }
        }
        return dscTipoStatus;
    }

    public String getDscPrioridade() {
        if (this.tipPrioridadeLote == null) {
            this.dscPrioridade = "Normal";
            this.tipPrioridadeLote = "N";
        } else {
            if (this.tipPrioridadeLote.equals("A")) {
                dscPrioridade = "Alta";
            } else if (this.tipPrioridadeLote.equals("M")) {
                dscPrioridade = "Médio";
            } else if (this.tipPrioridadeLote.equals("N")) {
                dscPrioridade = "Normal";
            }
        }
        return dscPrioridade;
    }

    public void setDscTipoStatus(String dscTipoStatus) {
        this.dscTipoStatus = dscTipoStatus;
    }

    public String getDscSinalStatus() {
        if (this.tipStatusSinal == null) {
            this.dscSinalStatus = "Em Andamento";
            this.tipStatusSinal = "A";
        } else {
            if (this.tipStatusSinal.equals("A")) {
                dscSinalStatus = "Em Andamento";
            } else if (this.tipStatusSinal.equals("F")) {
                dscSinalStatus = "Finalizado";
            } else if (this.tipStatusSinal.equals("N")) {
                dscSinalStatus = "Não Contratado";
            }
        }
        return dscSinalStatus;
    }

    public void setDscSinalStatus(String dscSinalStatus) {
        this.dscSinalStatus = dscSinalStatus;
    }

    public void setDscPrioridade(String dscPrioridade) {
        this.dscPrioridade = dscPrioridade;
    }

    public String getDscOrgao() {
        return dscOrgao;
    }

    public void setDscOrgao(String dscOrgao) {
        this.dscOrgao = dscOrgao;
    }

    public String getEmpColor() {
        return empColor;
    }

    public void setEmpColor(String empColor) {
        this.empColor = empColor;
    }

    public String getTipStatus() {
        return tipStatus;
    }

    public void setTipStatus(String tipStatus) {
        this.tipStatus = tipStatus;
    }

    public String getTipStatusSinal() {
        return tipStatusSinal;
    }

    public void setTipStatusSinal(String tipStatusSinal) {
        this.tipStatusSinal = tipStatusSinal;
    }

    public String getDscIdLote() {
        return dscIdLote;
    }

    public void setDscIdLote(String dscIdLote) {
        this.dscIdLote = dscIdLote;
    }

    public String getNomTecnico() {
        return nomTecnico;
    }

    public void setNomTecnico(String nomTecnico) {
        this.nomTecnico = nomTecnico;
    }

    public String getDptResponsavel() {
        return dptResponsavel;
    }

    public void setDptResponsavel(String dptResponsavel) {
        this.dptResponsavel = dptResponsavel;
    }

    public List<ProcessoDiagnosticoNivel1> getProcessoDiagnosticoNivel1List() {
        return processoDiagnosticoNivel1List;
    }

    public void setProcessoDiagnosticoNivel1List(List<ProcessoDiagnosticoNivel1> processoDiagnosticoNivel1List) {
        this.processoDiagnosticoNivel1List = processoDiagnosticoNivel1List;
    }

    public String getDscDiagnostico() {
        return dscDiagnostico;
    }

    public void setDscDiagnostico(String dscDiagnostico) {
        this.dscDiagnostico = dscDiagnostico;
    }

    public Assunto getIdAssunto() {
        return idAssunto;
    }

    public void setIdAssunto(Assunto idAssunto) {
        this.idAssunto = idAssunto;
    }

    public String getStatusAnterior() {
        return statusAnterior;
    }

    public void setStatusAnterior(String statusAnterior) {
        this.statusAnterior = statusAnterior;
    }

    public String getTipStatusAnterior() {
        return tipStatusAnterior;
    }

    public void setTipStatusAnterior(String tipStatusAnterior) {
        this.tipStatusAnterior = tipStatusAnterior;
    }

    public String getTipStatusSinalAnterior() {
        return tipStatusSinalAnterior;
    }

    public void setTipStatusSinalAnterior(String tipStatusSinalAnterior) {
        this.tipStatusSinalAnterior = tipStatusSinalAnterior;
    }

    public String getDscObs() {
        return dscObs;
    }

    public void setDscObs(String dscObs) {
        this.dscObs = dscObs;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idEmpreendimentoLote != null ? idEmpreendimentoLote.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof EmpreendimentoLote)) {
            return false;
        }
        EmpreendimentoLote other = (EmpreendimentoLote) object;
        if ((this.idEmpreendimentoLote == null && other.idEmpreendimentoLote != null) || (this.idEmpreendimentoLote != null && !this.idEmpreendimentoLote.equals(other.idEmpreendimentoLote))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "br.jm.financeiro.entity.EmpreendimentoLote[ idEmpreendimentoLote=" + idEmpreendimentoLote + " ]";
    }

    @Override
    public int compareTo(EmpreendimentoLote o) {
        return Collator.getInstance().compare(tipPrioridadeLote, o.tipPrioridadeLote);
    }
}
